import authRequest from './authRequest'

/**
 * 用户登录
 * @param {Object} data - 登录信息
 * @param {string} data.username - 用户名
 * @param {string} data.password - 密码
 */
export function login(data) {
    return authRequest({
        url: '/api/auth/login',
        method: 'post',
        data
    })
}

/**
 * 用户登出
 */
export function logout() {
    // 后端暂无登出接口，前端直接清理本地状态
    return Promise.resolve()
}

/**
 * 获取用户信息
 */
export function getUserInfo() {
    return request({
        url: '/api/user/me',
        method: 'get'
    })
}

/**
 * 修改密码
 * @param {Object} data - 密码信息
 * @param {string} data.currentPassword - 当前密码
 * @param {string} data.newPassword - 新密码
 */
export function changePassword(payload) {
    // 兼容入参：{ oldPassword, newPassword } 或 { currentPassword, newPassword }
    const data = {
        oldPassword: payload.oldPassword ?? payload.currentPassword,
        newPassword: payload.newPassword
    }
    return request({
        url: '/api/user/change_password',
        method: 'post',
        data
    }).then((res) => {
        // 统一判断成功/失败，尽量兼容多种后端返回格式
        const rawMessage = typeof res === 'string' ? res : (res && (res.message || res.msg || res.data))
        const hasOldPwdKeyword = /(旧密码|原密码|当前密码)/.test(String(rawMessage || ''))
        const hasErrorKeyword = /(错|错误|不正确|incorrect|invalid|failed|失败)/i.test(String(rawMessage || ''))

        // 通过多维度判断是否成功
        const successByCode = typeof res === 'object' && res && res.code !== undefined ? Number(res.code) === 200 : true
        const successByFlag = typeof res === 'object' && res ? (res.success !== false && res.ok !== false) : true
        const successByString = typeof res === 'string' ? !(hasOldPwdKeyword && hasErrorKeyword) && !/失败|error/i.test(res) : true

        const isSuccess = successByCode && successByFlag && successByString

        if (!isSuccess) {
            // 针对旧密码错误给出更明确提示
            const errMsg = (hasOldPwdKeyword && hasErrorKeyword) ? '当前密码不正确' : (rawMessage || '修改密码失败')
            return Promise.reject(new Error(String(errMsg)))
        }

        return res
    })
}